/**
* \file GUIPlugin.h
* \brief GUIPlugin decleration class
* \author Edouard ROGE
* \date 24 Novembre 2013
*/
#ifndef _GUIPLUGIN_LINUX_
#define _GUIPLUGIN_LINUX_

#include <string>
#include "GUI.h"
#include "Core/Memory/HeapObject.h"
#include "Core/GUI/IGUIPlugin.h"

class IGUIContext;

class GUIPlugin : public IGUIPlugin
{
public:

	/**
	* \fn GUIPlugin();
	* \brief Default contructor
	*/
	GUIPlugin();

	/**
	* \fn virtual ~GUIPlugin();
	* \brief Destructor
	*/
	virtual ~GUIPlugin();

	/**
	* \fn virtual const std::string & GetName() const;
	* \return Plug-in name
	* \brief Get the name of the plug-in
	*/
	GUI_LINUX virtual const std::string & GetName() const;

	/**
	* \fn virtual IGUIContext * CreateContext() const;
	* \return a newly created network context
	* \brief Create a network context
	*/
	GUI_LINUX virtual IGUIContext * CreateContext() const;

	/**
	* \fn virtual void DestroyContext(IGUIContext * _pContext) const;
	* \param _pContext Network context to destroy
	* \brief Destroy the context in parameter, created before by this plugin
	*/
	GUI_LINUX virtual void DestroyContext(IGUIContext * _pContext) const;

};

EXPORT_PLUGIN(GUIPlugin)

#endif // _GUIPLUGIN_LINUX_
